<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Помощник-виджет для отрисовки меню в виде дерева
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */

/**
 * Отрисовка виджета
 * 
 * @access public
 * @param string $str
 * @return string
 */
function tree_menu_widget($params = array()) {
   $obj =& get_instance();
   $output = '';
   // Получаем идентификатор меню
   $name = $params['name'];
   $obj->benchmark->mark('process_tree_menu_(_' . $name . '_)_start');
   $id_menu = 0;
   $obj->load->model('m_table');
   $obj->m_table->set_table('menus');
   $obj->m_table->add_restriction('name', $name);
   $obj->m_table->load_results();
   if (0 < $obj->m_table->get_count()) {
      $result = $obj->m_table->next_result();
      $id_menu = $result['id_menu'];
   }
   // Получаем идентификатор текущего элемента меню
   $id_content = null;
   if (isset($params['id'])) {
      $id_content = (int) $params['id'];
   }
   if (0 == $id_content) {
      $id_content = null;
   }
   
   // Подгружеам все дерево контентов
   $obj->load->helper('tree');
   $obj->m_table->set_table('contents');
   $obj->m_table->add_restriction('id_menu', $id_menu);
   $obj->m_table->add_restriction('status', 'active'); 
   $obj->m_table->add_sort('position');
   $obj->m_table->load_results();
   $contents = $obj->m_table->get_results();
   $tree = array_tree($contents, 'id_content', 'id_parent');
   $contents = collapse_tree($tree, 'level');
   
   // Обрабатываем...
   $obj->load->helper('content');
   foreach ($contents as &$content) {
      $obj->m_content->set_id($content['id_content']);
      $content['link'] = get_url($content);
      $content['level'] *= 10;
      $content['selected'] = array();
      $content['id_parent'] = (int) $content['id_parent'];
      if ($content['id_content'] == $id_content) {
         $content['selected'] = array(array());
      }
   }
   
   $data = array(
      'items' => $contents
   );
   $output = $obj->parser->parse('widgets/tree_menu/' . $name . '.html', $data, true);
   $obj->benchmark->mark('process_tree_menu_(_' . $name . '_)_end');
   return $output;
} // end tree_menu_widget
